﻿#ifndef COMMON_H
#define COMMON_H
#include <QDebug>
#include <QThread>
#include "halconcpp/HalconCpp.h"
#include "ui_mainwindow.h"
#include <string.h>
#include "Alg/Defect.h"
#include "Alg/Measure_Rect.h"
#include "Alg/Judge_Direction.h"
#include "Alg/Read_Model.h"
#include "Alg/Create_Model.h"
#include "Alg/Measure_Trapezoid.h"


const int PLCSUCCEED = 0;
const int PLCDBNUMBER = 3;
const int PLCRACK = 0;
const int PLCSLOT = 1;

namespace Ui {
class MainWindow;
//class PlcDlg;
}
// plc 信号值
enum SIG_PLC {
    START,//PC_开始
    STOP,  //PC_停止
    MOTOR1, //PC_玻璃盘1转动
    MOTOR2, //PC_上料2转动
    INCODERA,// 编码器A
    INCODERB, // 编码器B
    INSENSOR, //光纤传感器
    INPRESSSW1,//压力开关
    INPAUSESW,//暂停按钮
    QPULSE1,  //玻璃盘电机1脉冲
    QDIRECTION1,//玻璃盘电机1方向
    QPULSE2,//上料电机2脉冲
    QDIRECTION2,//上料电机2方向
    QENABLED1,//玻璃盘电机1使能
    QENABLED2,//上料电机2使能
    QGRAP1,//相机1拍照
    QGRAP2,//相机2拍照
    QGRAP3,//相机3拍照
    QGRAP4,//相机4拍照
    QGRAP5,//相机5拍照
    QGRAP6,//相机6拍照
    QNG1OUTAIR,//高速电磁阀1
    QNG2OUTAIR,//高速电磁阀2
    QNG3OUTAIR,//高速电磁阀3
    QNG4OUTAIR,//高速电磁阀4
    QNG5OUTAIR,//高速电磁阀5
    QNG6OUTAIR,//高速电磁阀6
    QPLATE,//震动盘
    QINAIR,//系统上气
    QLINE,//照明灯
    QTIMEOUT_LINE,//暂停灯
    QLIGHTG,//三色灯-绿
    QLIGHTY,//三色灯-黄
    QLIGHTR,//三色灯-红
    QLIGHTVOX,//三色灯-鸣
    MOTOR1_REV,//PC_玻璃盘电机转速
    MOTOR2_REV,//PC_上料电机转速
    MOTOR_RATION1,//PC_玻璃盘电机转比
    MOTOR_RATION2,//PC_上料电机转比
    OPTICAL,//PC_光纤位置
    PCCD_1,//PC_相机1距离
    PCCD_2,//PC_相机2距离
    PCCD_3,//PC_相机3距离
    PCCD_4,//PC_相机4距离
    PCCD_5,//PC_相机5距离
    PCCD_6,//PC_相机6距离
    MOTOR_NG1,//PC_NG1距离
    MOTOR_NG2,//PC_NG2距离
    MOTOR_NG3,//PC_NG3距离
    MOTOR_NG4,//PC_NG4距离
    MOTOR_NG5,//PC_NG5距离
    MOTOR_NG6,//PC_OK距离
    RESULT_NUMBER,//PC_料号
    CAMERA_RESULT, //PC_结果
    WARN_TIME,//PC_缺料报警时间
    STOP_TIME,//PC_停机延迟时间
	ENCODER //编码器值
};

struct CameraData
{
    int m_nIndex;                           //编号
    QString qStrCameraID;
    HalconCpp::HTuple hv_WindowHandle;
    HalconCpp::HObject Hobj;
    int m_nNGorOK;

};
struct CameraInfo
{
    int checkSum = 0;
    int goodSum = 0;
    int badSum = 0;
};

// PLC PLCdlg
struct PlcInfo{
    int nAddress = 0;
    int nValue = 0;
};

// Caemra
struct CameraParameter
{
    double ExposureTimeAbs;
    int OffsetX;
    int OffsetY;
    int Height;
    int Width;
};

struct CameraDlgInfo
{
    int m_nFunction;                    // 0.无 1.打开相机获取相机值 2.启动硬触发 3.启动连续采集 4.保存相机数据
    int m_nCamera;                      // 相机编号
    HalconCpp::HTuple hv_WindowHandle;  // 绑定的 Halcon 控件值
    bool m_bOpen;                       // 是否打开 Halcon 窗口
    int m_nSingle;                      // 单张硬触发
    int m_nConsecutive;                 // 连续采集
    int m_nPlate;                       // 是否启动转盘
    CameraParameter m_nParameter;       // 相机参数
};

// 存图   0  不存图   1 存图
struct SW_SaveImg{
    int nSwPic = 0;
    int nSwNg = 0;
    int nCCD1 = 0;
    int nCCD2 = 0;
    int nCCD3 = 0;
    int nCCD4 = 0;
    int nCCD5 = 0;
    int nCCD6 = 0;
};

// 测量   0 不测量    1 测量
struct SW_Check{
    int nCCD1 = 1;
    int nCCD2 = 1;
    int nCCD3 = 1;
    int nCCD4 = 1;
    int nCCD5 = 1;
    int nCCD6 = 1;
};


// 0 不选择 1 选择
struct SW_AlgPart
{
    int nCCD = 0;
    int nAlgA = 0;
    int nAlgB = 0;
    int nDefect = 0;
    int nRect = 0;
};

// 缺陷类型
struct SW_Alg
{
    SW_AlgPart m_ccd1;
    SW_AlgPart m_ccd2;
    SW_AlgPart m_ccd3;
    SW_AlgPart m_ccd4;
    SW_AlgPart m_ccd5;
    SW_AlgPart m_ccd6;
};

#endif // COMMON_H
